有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带H2的java Hibernate不存储数据

我正在使用H2开发一个简单的java应用程序,其中包含Hibernate

我也不例外。 Hibernate输出和H2的跟踪文件向我显示了数据的插入

但数据并没有存储在数据库中。 hibernate和H2控制台都不显示任何插入的数据

也许有人有主意

Thx

这是我的Hibernate配置:

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
    <property name="hibernate.connection.driver_class">org.h2.Driver</property>
    <property name="hibernate.connection.url">jdbc:h2:~/HibTest;TRACE_LEVEL_FILE=3;FILE_LOCK=NO</property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.connection.password"></property>

    <property name="hibernate.hbm2ddl.auto">create-drop</property>

    <mapping package="de.test.hib.domain" />
    <mapping class="de.test.hib.domain.Data" />
  </session-factory>
</hibernate-configuration>

这是我的域类:

package de.test.hib.domain;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;


@Entity
@SequenceGenerator(sequenceName="SEQ_DATA",name="SEQ_DATA_GEN",initialValue=1)
public class Data implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer id;
    private String content;

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof Data)) {
            return false;
        }

        Data other = (Data) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }

        return true;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="SEQ_PERSON_GEN")
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(nullable=false)
    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

以及持续的过程:

Transaction trans = HibernateUtils.getInstance().getCurrentSession().beginTransaction();
HibernateUtils.getInstance().getCurrentSession().saveOrUpdate(this);
HibernateUtils.getInstance().getCurrentSession().flush();
trans.commit();

共 (1) 个答案

  1. # 1 楼答案

    从数据库URL中删除选项FILE_LOCK=NO。这是非常危险的,因为这意味着数据库文件没有受到保护。如果数据库已经打开,以这种方式打开数据库将损坏数据库文件